const express = require('express');
const { getLogger } = require('../logger');
const logger = getLogger('routes.index');
const router = express.Router();
const swaggerJsdoc = require('swagger-jsdoc');
const swaggerUi = require('swagger-ui-express');
const path = require('path');

// Swagger 配置
const swaggerSpec = {
    definition: {
        openapi: '3.0.0',
        info: {
            title: 'API 文档',
            version: '1.0.0',
            description: 'Node.js + Express + MySQL 后台API文档',
        },
        servers: [
            {
                url: 'http://localhost:8888',
                description: '本地开发环境',
            },
        ],
        components: {
            securitySchemes: {
                bearerAuth: {
                    type: 'http',
                    scheme: 'bearer',
                    bearerFormat: 'JWT',
                },
            },
        },
    },
    apis: [
        path.join(__dirname, '../swagger.yaml'), // 仅使用 YAML 文件定义 API
        path.join(__dirname, './sseRoutes.js')  // 添加 SSE 路由的 Swagger 文档
    ],
};

const specs = swaggerJsdoc(swaggerSpec);

// 调试：输出生成的API文档
if (process.env.NODE_ENV === 'development') {
    logger.info('🔍 Swagger API文档已生成');
    logger.info('📊 API数量:', Object.keys(specs.paths || {}).length);
    logger.info('📝 可访问: http://localhost:8888/api/doc');
}


// 处理favicon请求
router.use('/favicon.ico', (req, res) => {
  res.sendFile(__dirname + '/public/favicon.ico'); // 确保路径正确
});


// 公开路由
router.use('/', require('./publicAuthRoutes')); // 不需要认证的公开路由

// 认证相关路由
router.use('/auth', require('./authRoutes'));      // 需要认证的路由

// 监控上报路由（需要在API文档之前，添加认证）
router.use('/monitor', require('./monitorRoutes'));

// SSE相关路由（添加认证）
router.use('/sse', require('./sseRoutes'));

// 管理后台路由
router.use('/admin/user', require('./userRoutes')); // 用户相关
router.use('/admin/role', require('./roleRoutes')); // 角色相关
router.use('/admin/menu', require('./menuRoutes')); // 菜单相关
router.use('/admin/permission', require('./permissionRoutes')); // 权限相关
router.use('/admin/department', require('./departmentRoutes')); // 部门相关
router.use('/admin/address', require('./addressRoutes')); // 地址管理相关
router.use('/admin/audit', require('./auditRoutes')); // 审计日志相关


// API文档路由（必须在最后，因为会捕获 /api/doc 路径）
router.use('/api/doc', swaggerUi.serve, swaggerUi.setup(specs)); 

module.exports = router;